/*
    created: 2023/4/12
    filename: listqueue.h
    author: 李东霖
    purpose：带头结点链队列的定义  
    备注：初始化时front和rear指向数据链表的头结点（该节点不存放值）
        入队：rear为入队结点的前驱，入队完成则后移
        出队：front为出队元素的前驱，出队销毁该元素结点并且将front->next指向出队元素的下一个结点  
    
*/

#ifndef _LISTQUEUE_H_
#define _LISTQUEUE_H_

#include<stdlib.h>
#include<stdio.h>
#include<string.h>

typedef int ElemType;

//单链表结点  
typedef struct LNode
{
    ElemType data;
    struct LNode* next;
}LNode;

//队列结构体  
typedef struct
{
    LNode *front;
    LNode *rear;
}LinkQueue,*PListQueue;

// 操作
//初始化 失败返回NULL 成功返回一个LinkQueue*
LinkQueue* InitQueue1();  
//初始化    失败q=NULL 成功q=LinkQueue*  返回值 -1-存在p 0-失败 1-成功
int InitQueue2(PListQueue *q);
//销毁队列  
void DestroyQueue(PListQueue *q);  
//清空队列  
void ClearQueue(PListQueue q); 
//判断队列是否为空  返回值：-1-传入空指针 0-非空 1-空
int QueueEmpty(PListQueue q); 
//入队 返回值：-1-传入空指针 0-失败 1-成功
int enQueue(PListQueue q,ElemType *e); 
//出队 -1-传入空指针 0-失败 1-成功
int deQueue(PListQueue q,ElemType *e); 
//判断队列是否满 返回值：-1-传入空指针 0-非空 1-空 对于链队这个好像没意义
// int QueueFull(PListQueue q);   
//得到队头 -1-传入空指针 0-失败 1-成功
int GetHeadQueue(PListQueue q,ElemType *e);  
//得到队列的长度 -1-传入空指针 >=0 队列长度  
int LengthQueue(PListQueue q); 
//打印队列  
void DispQueue(PListQueue q);



#endif //!_LISTQUEUE_H_